// 作用域，执行上下文
//会先从当前上下文的变量对象中查找，如果没有找到，就会从父级(词法层面上的父级)执行上下文的变量对象中查找，
// 一直找到全局上下文的变量对象，也就是全局对象。这样由多个执行上下文的变量对象构成的链表就叫做作用域链。


// 1.
function foo() {
    console.log(a);
    a = 1;
}

foo(); // Uncaught ReferenceError: a is not defined


// 2.
function foo() {
    console.log(a);
    var a = 1;
}

foo(); // undefined


// 3.
var a = 3;
function foo() {
    console.log(a);
    a = 1;
}

foo(); // 3


// 4.
var a = 3;
function foo() {
    console.log(a);
    var a = 1;
}

foo(); // undefined